/* 数据类型 */
void main() {
  numberType();
  stringType();
}

void numberType() {
  int var1 = 100;
  double var2 = 200.09;
  num var3 = 299;

  int toInt = var2.toInt();
  String toString = var2.toString();
  int round = var2.round();
  String toStringAsFixed4 = var2.toStringAsFixed(4);
  double remainder5 = var2.remainder(5);
  int compareTo5 = var2.compareTo(5); /* 0相等 1大于 -1小于 */
  int gcd20 = var1.gcd(20); /* 最大公约数 */
  String toStringAsExponential2 = var1.toStringAsExponential(2); /* 科学计数 */
  String toStringAsPrecision3 = var1.toStringAsPrecision(3); /* 指定精度 */

  print("var1 $var1");
  print("var2 $var2");
  print("var3 $var3");
  print("round $round");
  print("toInt $toInt");
  print("toString $toString");
  print("toStringAsFixed4 $toStringAsFixed4");
  print("remainder5 $remainder5");
  print("compareTo5 $compareTo5");
  print("gcd20 $gcd20");
  print("toStringAsExponential2 $toStringAsExponential2");
  print("toStringAsPrecision3 $toStringAsPrecision3");
}

/*
* 参考文档
* https://api.dart.cn/stable/3.4.2/dart-core/String-class.html
*
* */
void stringType() {
  String type1 = 'type1';
  String type2 = "type2";
  String type3 = '''type3''';

  /* 正则表达式用法 */
  RegExp regExp1 = RegExp(r'/d+');

  /* 字符拼接 */
  String concat = type3 + type2 + type1 + "sadasjhd";

  /* 字符引用拼接 */
  String formatted = 'type3 -> $type3';

  /* 字符是否为空 */
  bool isEmpty = concat.isEmpty;
  bool isNotEmpty = concat.isNotEmpty;

  /* 正则替换 */
  var isPhone = RegExp(r'^1\d{10}$');
  bool hasMatch = isPhone.hasMatch('13755645841');

  /* 查找是否包含字符 */
  bool contains = concat.contains("s123");
  bool containsInIndex10 = concat.contains("s123", 10);

  print("type1 $type1");
  print("regExp1 $regExp1");
  print("formatted $formatted");
  print("isEmpty $isEmpty");
  print("isNotEmpty $isNotEmpty");
  print("formatted $formatted");
  print("isEmpty $isEmpty");
  print("isNotEmpty $isNotEmpty");
  print("isPhone $isPhone");
  print("hasMatch $hasMatch");
  print("contains $contains");
  print("containsInIndex10 $containsInIndex10");
}

void booleanType() {
  bool boolean = false;
  var n100 = 100;
  /* 变量判断必须明确判断类型是否匹配，js会默认转换 */
  if (n100 == null);
  if (n100 == true);
  if (n100 == 1000);
  // if (n100); 无法判断
  /* 其他方法判断 */
  print(n100.isNaN); /* 是否为非数字 */
  print(n100.isFinite); /* 是否有限 */
  print(n100.isInfinite); /* 是否无限 */
  print(n100.isNegative); /* 是否负数 */
  print(n100.isFinite); /* 是否有限 */
  print(n100.isFinite); /* 是否有限 */
}

void listType() {
  List list = [1, 2, 3, true, false, 3.14, 'fu', 'bar'];
  List list2 = [... list, 200, 'fu', 'bar'];
  List list3 = <int>[2, 3000]; /* 限定类型 */

  List list4 = new List.empty(growable: true);


  

}
